package it.agm.fanta.adapter;

import it.agm.activity.dialog.GenericDialog;
import it.agm.fanta.FantaserviceApp;
import it.agm.fanta.R;
import it.agm.fanta.R.id;
import it.agm.fanta.model.Giocatore;

import java.util.ArrayList;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.ToggleButton;

public class FormazioneWriteAdapter extends ArrayAdapter<Giocatore> {
	
	public FormazioneWriteAdapter(Context context, int textViewResourceId,
			ArrayList<Giocatore> objects) {
        super(context, textViewResourceId, objects);
    }

	@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
		final Giocatore giocatore = getItem(position);
		if(FantaserviceApp.formazioneWritten!= null && !FantaserviceApp.formazioneWritten.isEmpty() ){
        	for (Giocatore giocatoreFormazione : FantaserviceApp.formazioneWritten) {
				if(giocatoreFormazione.getIdcalciatore() == giocatore.getIdcalciatore()){
					giocatore.setLineup(giocatoreFormazione.getLineup());
					giocatore.setPosizione(giocatoreFormazione.getPosizione());
				}
			}
        }
		
        LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.row_calciatore_fromazione_write, null);
        TableRow row = (TableRow) convertView.findViewById(id.rowGiocatoreFormazioneDaSchierare); 
        TextView ruolo = (TextView)row.findViewById(R.id.ruolo);
        ImageView stato = (ImageView)row.findViewById(R.id.stato);
        TextView nome = (TextView)row.findViewById(R.id.nome);
        final TextView posizione = (TextView)row.findViewById(R.id.posizione);
        TextView partitareale = (TextView)row.findViewById(R.id.partitaReale);
        final ToggleButton lineUpTitolare = (ToggleButton)row.findViewById(R.id.schieraTitolare);
        final ToggleButton lineUpRiserva = (ToggleButton)row.findViewById(R.id.schieraRiserva);

        
        lineUpTitolare.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
            	Giocatore giocatore = getItem(position);
            	ToggleButton button = (ToggleButton) view;
            	InfoGiocatore info = new InfoGiocatore();
            	info.setInfo(giocatore);
        	    if (button.isChecked()) {	
        	    	if(info.getListaTmpDaSchierare() == null || info.getSizeType() > info.getListaTmpDaSchierare().size()){
	        	    	if(Giocatore.RISERVA == giocatore.getLineup() && 0 != giocatore.getPosizione()){
	        	    		info.removePosizioneGiocatore(Giocatore.RISERVA,giocatore.getPosizione());
	        	    	}
	        	    	giocatore.setLineup(Giocatore.TITOLARE);
	        	    	giocatore.setPosizione(info.getPosizioneGiocatore(Giocatore.TITOLARE,giocatore.getRuolo()));

	        	    	lineUpRiserva.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.schiera_riserva, 0, 0);

	        	    	button.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.titolare, 0, 0);
	        	    	int indexGiocatore = FantaserviceApp.formazioneWritten.indexOf(giocatore);
	        	    	if(FantaserviceApp.formazioneWritten != null && FantaserviceApp.formazioneWritten.size() > indexGiocatore && indexGiocatore > -1){
		        	    	FantaserviceApp.formazioneWritten.get(indexGiocatore).setPosizione(giocatore.getPosizione());
		        	    	FantaserviceApp.formazioneWritten.get(indexGiocatore).setLineup(Giocatore.TITOLARE);
	        	    	}
	        	    	posizione.setText("" + giocatore.getPosizione());
	        	    	info.getListaTmpDaSchierare().add(giocatore);
	        	    	info.getListaTmpRiserve().remove(giocatore);
	        	    	button.setChecked(true);
	        	    	lineUpRiserva.setChecked(false);
        	    	}else{
        	    		new GenericDialog(FantaserviceApp.formazioneWriteActivity, "Numero di " + info.getTipo() + " schierabili superato","ERROR");
        	    		button.setChecked(false);
        	    	}
        	    } else {
        	    	button.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.schiera_titolare, 0, 0);
        	    	info.getListaTmpDaSchierare().remove(giocatore);
        	    	info.removePosizioneGiocatore(Giocatore.TITOLARE,giocatore.getPosizione());
        	    	int indexGiocatore = FantaserviceApp.formazioneWritten.indexOf(giocatore);
        	    	if(FantaserviceApp.formazioneWritten != null && FantaserviceApp.formazioneWritten.size() > indexGiocatore){
	        	    	if(indexGiocatore > -1){
	        	    		FantaserviceApp.formazioneWritten.get(indexGiocatore).setPosizione(0);
		        	    	FantaserviceApp.formazioneWritten.get(indexGiocatore).setLineup(' ');
	        	    	}
	        	    	posizione.setText("" + 0);
        	    	}
        	    	
        	    }
            }
        });
        
        lineUpRiserva.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
            	ToggleButton button = (ToggleButton) view;
            	Giocatore giocatore = getItem(position);
            	InfoGiocatore info = new InfoGiocatore();
            	info.setInfo(giocatore);
  
        	    if (button.isChecked()) {
        	    	if(Giocatore.TITOLARE == giocatore.getLineup() && 0 != giocatore.getPosizione()){
        	    		info.removePosizioneGiocatore(Giocatore.TITOLARE,giocatore.getPosizione());
        	    	}
        	    	giocatore.setLineup(Giocatore.RISERVA);
        	    	button.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.riserva, 0, 0);
        	    	lineUpTitolare.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.schiera_titolare, 0, 0);
        	    	
        	    	giocatore.setPosizione(info.getPosizioneGiocatore(Giocatore.RISERVA,giocatore.getRuolo()));
        	    	int indexGiocatore = FantaserviceApp.formazioneWritten.indexOf(giocatore);
        	    	if(FantaserviceApp.formazioneWritten != null && FantaserviceApp.formazioneWritten.size() > indexGiocatore && indexGiocatore > -1){
	        	    	FantaserviceApp.formazioneWritten.get(indexGiocatore).setPosizione(giocatore.getPosizione());
	        	    	FantaserviceApp.formazioneWritten.get(indexGiocatore).setLineup(Giocatore.RISERVA);
        	    	}
        	    	posizione.setText("" + giocatore.getPosizione());
        	    	info.getListaTmpDaSchierare().remove(giocatore);
        	    	info.getListaTmpRiserve().add(giocatore);
        	    	lineUpTitolare.setChecked(false);
        	    } else {
        	    	button.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.schiera_riserva, 0, 0);
        	    	info.getListaTmpRiserve().remove(giocatore);
        	    	info.removePosizioneGiocatore(Giocatore.RISERVA,giocatore.getPosizione());
        	    	int indexGiocatore = FantaserviceApp.formazioneWritten.indexOf(giocatore);
        	    	if(FantaserviceApp.formazioneWritten != null && FantaserviceApp.formazioneWritten.size() > indexGiocatore ){
	        	    	if(indexGiocatore > -1){
	        	    		FantaserviceApp.formazioneWritten.get(indexGiocatore).setPosizione(0);
	        	    		FantaserviceApp.formazioneWritten.get(indexGiocatore).setLineup(' ');
	        	    	}
	        	    	posizione.setText("" + 0);
        	    	}
        	    }
            }
        });
        
       
        int idLineUpRiserva = 0;
        int idLineUpTitolare = 0;
        boolean titolareSelected = false;
        boolean riservaSelected = false;
        switch (giocatore.getLineup()) {
		case Giocatore.TITOLARE:
			titolareSelected = true;
			riservaSelected = false;
			idLineUpTitolare = R.drawable.titolare;
			idLineUpRiserva = R.drawable.schiera_riserva;
			break;
		case Giocatore.RISERVA:
			titolareSelected = false;
			riservaSelected = true;
			idLineUpTitolare = R.drawable.schiera_titolare;
			idLineUpRiserva = R.drawable.riserva;
			break;
		default:
			titolareSelected = false;
			riservaSelected = false;
			idLineUpTitolare = R.drawable.schiera_titolare;
			idLineUpRiserva = R.drawable.schiera_riserva;
		}
//        Drawable drawableLineUpTitolare = convertView.getContext().getResources().getDrawable(idLineUpTitolare);
//        Drawable drawableLineUpRiserva = convertView.getContext().getResources().getDrawable(idLineUpRiserva);
        
		int idImage = R.drawable.t;
		switch (giocatore.getStato()) {
		case 'I':
			idImage = R.drawable.i;
			break;
		case 'D':
			idImage = R.drawable.d;
			break;
		case 'S':
			idImage = R.drawable.s;
			break;
		default:
			break;
		}
		Drawable drawable = convertView.getContext().getResources().getDrawable(idImage);
       
        ruolo.setText(""+ giocatore.getRuolo());
        stato.setImageDrawable(drawable);
        nome.setText(""+ giocatore.getNome() +" " + ""+ giocatore.getCognome());
        posizione.setText(""+ giocatore.getPosizione());
        partitareale.setText(""+ giocatore.getPartitareale());
        lineUpTitolare.setCompoundDrawablesWithIntrinsicBounds(0, idLineUpTitolare, 0, 0);//setBackground(drawableLineUpTitolare);
        lineUpTitolare.setChecked(titolareSelected);
        lineUpRiserva.setCompoundDrawablesWithIntrinsicBounds(0, idLineUpRiserva, 0, 0);//setBackground(drawableLineUpRiserva);
        lineUpRiserva.setChecked(riservaSelected);
        return convertView;
    }
	
	

}
